home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Tools / mpp84 / mpp84.py < prev    next >
Encoding:
Text File  |  1991-12-18  |  5.8 KB  |  286 lines

  1. -- mpp.py - test out PEPY
  2.  
  3.  
  4. -- @(#) $Header: /xtel/pp/pp-beta/Tools/mpp84/RCS/mpp84.py,v 6.0 1991/12/18 20:31:34 jpo Rel $
  5. --
  6. -- $Log: mpp84.py,v $
  7. -- Revision 6.0  1991/12/18  20:31:34  jpo
  8. -- Release 6.0
  9. --
  10. --
  11. --
  12.  
  13.  
  14. MPP DEFINITIONS   ::=
  15.  
  16. %{
  17. #ifndef lint
  18. static char *rcsid = "$Header: /xtel/pp/pp-beta/Tools/mpp84/RCS/mpp84.py,v 6.0 1991/12/18 20:31:34 jpo Rel $";
  19. #endif  lint
  20.  
  21. #include <stdio.h>
  22.  
  23.  
  24. #define ps_advise(ps, f) \
  25.         advise (NULLCP, "%s: %s", (f), ps_error ((ps) -> ps_errno))
  26.  
  27. /*     DATA */
  28. int    unpack = 1;
  29.  
  30. static char *myname = "mpp84";
  31.  
  32. static enum { ps2mpp, pl2mpp } mode = ps2mpp;
  33.  
  34. static enum format { p1, p2, sfd, p2hdr, p1hdr } topfmt = p2;
  35.  
  36.  
  37. void    adios ();
  38.  
  39. /*     MAIN */
  40.  
  41. /* ARGSUSED */
  42.  
  43. main (argc, argv, envp)
  44. int     argc;
  45. char  **argv,
  46.       **envp;
  47. {
  48.     register int    status = 0;
  49.     register char  *cp;
  50.     register FILE  *fp;
  51.  
  52.     if (myname = rindex (argv[0], '/'))
  53.         myname++;
  54.     if (myname == NULL || *myname == NULL)
  55.         myname = argv[0];
  56.  
  57.     for (argc--, argv++; cp = *argv; argc--, argv++)
  58.         if (*cp == '-') {
  59.             if (strcmp (cp + 1, "ps") == 0) {
  60.                 mode = ps2mpp;
  61.                 continue;
  62.             }
  63.             if (strcmp (cp + 1, "pl") == 0) {
  64.                 mode = pl2mpp;
  65.                 continue;
  66.             }
  67.             if (strcmp (cp + 1, "p1") == 0) {
  68.                 topfmt = p1;
  69.                 continue;
  70.             }
  71.             if (strcmp (cp + 1, "p2") == 0) {
  72.                 topfmt = p2;
  73.                 continue;
  74.             }
  75.             if (strcmp (cp + 1, "sfd") == 0) {
  76.                 topfmt = sfd;
  77.                 continue;
  78.             }
  79.         if (strcmp (cp + 1, "nounpack") == 0) {
  80.         unpack = 0;
  81.         continue;
  82.         }
  83.         if (strcmp (cp + 1, "p2hdr") == 0) {
  84.         topfmt = p2hdr;
  85.         continue;
  86.         }
  87.         if (strcmp (cp + 1, "p1hdr") == 0) {
  88.         topfmt = p1hdr;
  89.         continue;
  90.         }
  91.             adios (NULLCP, "usage: %s [-nounpck] [ -ps | -pe ] [-p1 | -p2 | -p2hdr | -p1hdr | -sfd ] [ files... ]",
  92.                     myname);
  93.         }
  94.         else
  95.             break;
  96.  
  97.     if (argc == 0)
  98.         status = process ("(stdin)", stdin);
  99.     else
  100.         while (cp = *argv++) {
  101.             if ((fp = fopen (cp, "r")) == NULL) {
  102.                 advise (cp, "unable to read");
  103.                 status++;
  104.                 continue;
  105.             }
  106.             status += process (cp, fp);
  107.             (void) fclose (fp);
  108.         }
  109.  
  110.     exit (status);              /* NOTREACHED */
  111. }
  112.  
  113. /*   */
  114.  
  115. static int  process (file, fp)
  116. register char *file;
  117. register FILE *fp;
  118. {
  119.     enum format curfmt = topfmt;
  120.     register PE     pe;
  121.     register PS     ps;
  122.  
  123.     if ((ps = ps_alloc (std_open)) == NULLPS) {
  124.         ps_advise (ps, "ps_alloc");
  125.         return 1;
  126.     }
  127.     if (std_setup (ps, fp) == NOTOK) {
  128.         advise (NULLCP, "%s: std_setup loses", file);
  129.         return 1;
  130.     }
  131.  
  132.     for (;;) {
  133.         switch (mode) {
  134.             case ps2mpp: 
  135.                 if ((pe = ps2pe (ps)) == NULLPE)
  136.                     if (ps -> ps_errno) {
  137.                         ps_advise (ps, "ps2pe");
  138.                 you_lose: ;
  139.             if (pe != NULLPE)
  140.                 pe_free (pe);
  141.             ps_free (ps);
  142.                         return 1;
  143.                     }
  144.                     else {
  145.                 done:   ;
  146.                         ps_free (ps);
  147.                         return 0;
  148.                     }
  149.                 break;
  150.  
  151.             case pl2mpp: 
  152.                 if ((pe = pl2pe (ps)) == NULLPE)
  153.                     if (ps -> ps_errno) {
  154.                         ps_advise (ps, "pl2pe");
  155.                         goto you_lose;
  156.                     }
  157.                     else
  158.                         goto done;
  159.                 break;
  160.         }
  161.  
  162.         switch (curfmt) {
  163.             case p1:
  164.             default:
  165.                 (void) print_P1_MPDU (pe, 1, NULLIP, NULLVP, NULLCP);
  166.                 break;
  167.  
  168.             case p2:
  169.                 (void) print_P2_UAPDU (pe, 1, NULLIP, NULLVP, NULLCP);
  170.                 break;
  171.  
  172.             case sfd:
  173.                 (void) print_SFD_Document (pe, 1, NULLIP, NULLVP, NULLCP);
  174.                 break;
  175.  
  176.         case p2hdr:
  177.         (void) print_P2_Heading (pe, 1, NULLIP, NULLVP, NULLCP);
  178.         break;
  179.  
  180.         case p1hdr:
  181.         (void) print_P1_UMPDUEnvelope (pe, 1, NULLIP, NULLVP, NULLCP);
  182.         break;
  183.  
  184.         }
  185.  
  186.         pe_free (pe);
  187.     }
  188. }
  189.  
  190. /*   */
  191.  
  192. %}
  193.  
  194. BEGIN
  195.  
  196. END
  197.  
  198. %{
  199. /*     DEBUG */
  200.  
  201. #ifdef  DEBUG
  202. testdebug (pe, s)
  203. register PE pe;
  204. register char *s;
  205. {
  206.     static int  debug = OK;
  207.     char   *cp;
  208.     register PS     ps;
  209.  
  210.     switch (debug) {
  211.         case NOTOK: 
  212.             break;
  213.  
  214.         case OK: 
  215.             if ((debug = (cp = getenv ("PEPYDEBUG")) && *cp ? atoi (cp)
  216.                         : NOTOK) == NOTOK)
  217.                 break;
  218.             fprintf (stderr, "%s made with %s\n", myname, pepyid);
  219.  
  220.         default: 
  221.             fprintf (stderr, "%s\n", s);
  222.  
  223.             if ((ps = ps_alloc (std_open)) == NULLPS)
  224.                 return;
  225.             if (std_setup (ps, stderr) != NOTOK)
  226.                 (void) pe2pl (ps, pe);
  227.             fprintf (stderr, "--------\n");
  228.             ps_free (ps);
  229.             break;
  230.     }
  231. }
  232. #endif  DEBUG
  233.  
  234. /*     ERRORS */
  235.  
  236. /* VARARGS2 */
  237.  
  238. void    adios (what, fmt, a, b, c, d, e, f, g, h, i, j)
  239. char   *what,
  240.        *fmt,
  241.        *a,
  242.        *b,
  243.        *c,
  244.        *d,
  245.        *e,
  246.        *f,
  247.        *g,
  248.        *h,
  249.        *i,
  250.        *j;
  251. {
  252.     advise (what, fmt, a, b, c, d, e, f, g, h, i, j);
  253.     _exit (1);
  254. }
  255.  
  256. /*   */
  257.  
  258. /* VARARGS2 */
  259.  
  260. void    advise (what, fmt, a, b, c, d, e, f, g, h, i, j)
  261. char   *what,
  262.        *fmt,
  263.        *a,
  264.        *b,
  265.        *c,
  266.        *d,
  267.        *e,
  268.        *f,
  269.        *g,
  270.        *h,
  271.        *i,
  272.        *j;
  273. {
  274.     (void) fflush (stdout);
  275.  
  276.     fprintf (stderr, "%s: ", myname);
  277.     fprintf (stderr, fmt, a, b, c, d, e, f, g, h, i, j);
  278.     if (what)
  279.         (void) fputc (' ', stderr), perror (what);
  280.     else
  281.         (void) fputc ('\n', stderr);
  282.     (void) fflush (stderr);
  283. }
  284.  
  285. %}
  286.